// utils.js - 你的项目通用工具函数
// 适用于 Django + Bootstrap 5（无 jQuery）

/**
 * 获取 CSRF Token（用于 AJAX 请求）
 * 通常从 cookie 中读取 'csrftoken'
 */
function getCSRFToken() {
    const name = 'csrftoken';
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        const cookies = document.cookie.split(';');
        for (let i = 0; i < cookies.length; i++) {
            const cookie = cookies[i].trim();
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}

/**
 * 便捷函数：发送 POST 请求（使用 fetch）
 * @param {string} url
 * @param {Object} data - 要发送的数据
 * @param {Function} onSuccess - 成功回调
 * @param {Function} onError - 错误回调
 */
function postJSON(url, data, onSuccess, onError) {
    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'X-CSRFToken': getCSRFToken(),
        },
        body: JSON.stringify(data),
        credentials: 'same-origin'  // 保持会话
    })
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.json();
    })
    .then(data => {
        if (onSuccess) onSuccess(data);
    })
    .catch(error => {
        console.error('Fetch error:', error);
        if (onError) onError(error);
    });
}

/**
 * 便捷函数：显示 Toast 提示（需 Bootstrap 5 的 Toast 组件）
 * 使用前需在页面添加 Toast HTML 结构
 */
function showToast(message, title = "提示") {
    // 动态创建 Toast（如果页面没有）
    let toastEl = document.getElementById('global-toast');
    if (!toastEl) {
        const toastHTML = `
        <div id="global-toast" class="toast hide" role="alert" aria-live="assertive" aria-atomic="true" style="position: fixed; top: 20px; right: 20px; z-index: 1055;">
            <div class="toast-header">
                <strong class="me-auto">${title}</strong>
                <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
            </div>
            <div class="toast-body">
                ${message}
            </div>
        </div>`;
        document.body.insertAdjacentHTML('afterbegin', toastHTML);
        toastEl = document.getElementById('global-toast');
    } else {
        document.querySelector('#global-toast .toast-body').textContent = message;
    }

    const toast = new bootstrap.Toast(toastEl);
    toast.show();
}

/**
 * 页面加载完成后执行（类似 jQuery 的 $(document).ready）
 * @param {Function} fn
 */
function ready(fn) {
    if (document.readyState !== 'loading') {
        fn();
    } else {
        document.addEventListener('DOMContentLoaded', fn);
    }
}

/**
 * 通用事件绑定（兼容旧浏览器）
 */
function on(element, event, selector, handler) {
    element.addEventListener(event, function(e) {
        if (selector) {
            if (e.target.matches(selector)) {
                handler.call(e.target, e);
            }
        } else {
            handler.call(this, e);
        }
    });
}

// --- 可在此添加更多工具函数 ---
// 例如：表单验证、日期格式化、防抖等

/**
 * 示例：防抖函数
 */
function debounce(func, wait) {
    let timeout;
    return function executedFunction(...args) {
        const later = () => {
            clearTimeout(timeout);
            func(...args);
        };
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
    };
}

// --- 导出（仅在模块环境中有效，普通 script 可忽略）---
// 如果你使用 ES6 模块，可改为 export { getCSRFToken, postJSON, ... }
